#include <stdio.h>
#include <math.h>
 
#define pi 3.1415926
 
typedef struct
{
	double x_coordinate;
	double(*func)(double);
}Point;


double derivative(Point*p,double accuracy)
{
	double y_coordinate;
	double delta_x,delta_y;
	delta_x=accuracy;
	y_coordinate=p->func(p->x_coordinate);
	delta_y=p->func(p->x_coordinate+delta_x)-y_coordinate;
	return (double)(delta_y/delta_x);
}

voidt demo0(void) {
	Point p;
	double slope;
	p.x_coordinate = 0;
	p.func = sin;
	slope = derivative(&p,0.00001);
	printf("%f\n", slope);
 
	p.x_coordinate = pi/2;
	p.func = sin;
	slope = derivative(&p,0.00001);
	printf("%f\n", slope);
 
	p.x_coordinate = pi/4;
	p.func = sin;
	slope = derivative(&p,0.00001);
	printf("%f\n", slope);	
	
}

voidt demo1(void) {
	Point p;
	double slope;
	p.x_coordinate = 0;
	p.func = sin;
	slope = derivative(&p,0.00001);
	printf("%f\n", slope);
 
	p.x_coordinate = pi/2;
	p.func = sin;
	slope = derivative(&p,0.00001);
	printf("%f\n", slope);
 
	p.x_coordinate = pi/4;
	p.func = sin;
	slope = derivative(&p,0.00001);
	printf("%f\n", slope);	
	
}

int main()
{
	demo1();
 
   return 0;
}
